#ifndef REGISTERDIALOG_H
#define REGISTERDIALOG_H

#include "global.h"
#include "HttpMgr.h"

#include <QDialog>
#include <QRegularExpression>
#include <QString>
#include <QJsonDocument> // jsonDoc
#include <QMap>
#include <QUrl>
#include <QTimer>


namespace Ui {
class RegisterDialog;
}

class RegisterDialog : public QDialog
{
    Q_OBJECT

public:
    explicit RegisterDialog(QWidget *parent = nullptr);
    ~RegisterDialog();

signals:
    void sigSwitchLogin(); // 注册成功，切换到登陆界面的signal

private slots:
    void on_get_code_clicked(); // 获取验证码按钮的槽函数
    void slot_reg_mod_finish(ReqId id, QString res, ErrorCodes err); // 接收htpp请求的数据
    void on_confirm_btn_clicked(); // 去注册
    void on_cancel_btn_clicked(); // 取消注册
    void on_return_btn_clicked(); // 注册成功界面，返回登陆界面

private:
    Ui::RegisterDialog *ui;

    // 消息处理的声明
    void initHttpHandlers();
    QMap<ReqId, std::function<void(const QJsonObject&)>> _handlers; // 消息处理

    // 提示函数(注意函数一旦发生改动的话，调用这个函数的地方也是要发生改动的，不发生改动的话，是可以加上默认参数的)
    void showTip(QString errstr = "", bool b_ok = true);
    // 输入框的验证
    bool checkUserValid();
    bool checkEmailValid();
    bool checkPassValid();
    bool checkConfirmValid();
    bool checkVarifyValid();

    // （err_tip 提示框的设置）添加和删除错误
    void AddTipErr(TipErr err, QString tip);
    void DelTipErr(TipErr err);
    QMap<TipErr, QString> _tip_errs; // _tip_errs用来缓存各个输入框输入完成后提示的错误，如果该输入框错误清除后就显示剩余的错误，每次只显示一条

    // 注册成功后的界面切换
    void ChangeTipPage();
    QTimer* _countdown_timer;
    int _countdown; // 初始化为 5s
};

#endif // REGISTERDIALOG_H
